perm filename TLKEF3.FAI[PNT,HE] blob
sn#346146 filedate 1978-04-05 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE TLKEF3
C00004 00003 START OF EXECUTABLE CODE
C00009 00004 [LOCAL STORAGE AREA]
C00011 ENDMK
C⊗;
TITLE TLKEF3
INTERNAL TLKEF3
;"TLKEF3" IS A SAIL CALLABLE PROCEDURE FOR SENDING A COMMAND INSTRUCTION
;BLOCK FROM THE PDP10 TO THE PDP11. THE INSTRUCTION BLOCK CONTAINS THE
;INFORMATION NECESSARY TO EXECUTE A MOVE INSTRUCTION. A SAMPLE SAIL
;DECLARATION FOLLOWS:
;
; TLKEF3(INTEGER MASTER;INTEGER ARRAY DATA);
;WHERE
; MASTER= CHECK WORD TO ELF TO INSURE THIS IS A LEGAL INSTRUCTION
; MOVE_CODE= TELL WHETHER THIS IS CENTER OR MOVE
; DATA = ADDR. OF COEFFICENT DATA ARRAY
;
;TLKEF3 EXPECTS THE MASTER NUMBER IN THE ELF TO BE SET TO 54321 WHEN THE ELF
;IS PREPARED TO ACCEPT A MOVE COMMAND. AFTER THE LAST OF THE DATA HAS BEEN
;BEEN TRANSFERED BY "TLKEF3", THE MASTER NUMBER IS SET TO 12345.
;FOR MOVE THE CODE IS 76, FOR CENTER THE CODE IS 67.
;DEFINITIONS
P←17 ;PUSH STACK REGISTER
MVDDAT←37777 ;SIGNAL WHEN MOTION DONE
CMDADD←40000 ;MASTER NUMBER (WORD) ADDRESS IN ELF
CMDDAT←40001 ;FIRST ADDRESS TO START TRANSFERING DATA
DBUFL←=2000 ;NUMBER OF WORDS IN DATA BUFFER
;START OF EXECUTABLE CODE
TLKEF3: MOVEM 16,HOLD+14 ;SAVE THE REGISTERS
MOVE 16,[XWD 2,HOLD]
BLT 16,HOLD+13
IOPUSH 1, ;CALLER MIGHT WANT THIS CHANNEL
JRST [ OUTSTR CM0 ;IOPDLOV MESSAGE
JRST TLKDNE ]
INIT 1,17 ;INITIALIZE THE ELF
SIXBIT /ELF/
0
JRST [ OUTSTR CM1 ;ERROR RETURN
JRST TLKDNE ]
GETSTS 1,1 ;GET THE ELF STATUS WORD
TRNE 1,777700 ;CHECK FOR ERROR CONDITION
JRST [ OUTSTR CM2 ;INDICATE STATUS ERROR
JRST TLKDNE ]
;CHECK IF ELF IS READY TO RECEIVE A COMMAND BLOCK
MTAPE 1,MSTADD ;GET THE VALUE OF "MASTER" WORD IN ELF
JRST [ OUTSTR CM3 ;ERROR RETURN
JRST TLKDNE ]
MOVE 2,MASTER ;LOAD VALUE INTO REGISTER
CAIE 2,12345 ;CHECK IF CORRECT ELF MASTER NUMBER
JRST [ OUTSTR CM4 ;ELF NOT READY FOR COMMAND IF NOT EQUAL
JRST TLKDNE ]
;SEND MOVE DATA TO "ELF"
MOVE 2,-1(P) ;GET THE DATA ARRAY ADDRESSS
SOJ 2, ;SETUP IOWD STATEMENT TO TRANSFER TO ELF
OR 2,[XWD -DBUFL,0]
MOVEM 2,OUTLST
USETO 1,CMDMDE ;SET UP OUTPUT OF COMMAND BLOCK
OUT 1,OUTLST ;SEND THE COMMAND LIST TO THE ELF
JRST .+2 ;NORMAL RETURN
JRST [ OUTSTR CM5 ;ERROR RETURN
JRST TLKDNE ]
;SIGNAL ELF THAT TRANFER OF DATA COMPLETE;
MOVE 2,-2(P) ;GET THE MASTER NUMBER
HRLI 2,1 ;INDICATE SENDING ONLY ONE WORD
MOVEM 2,NEWMAS ;SEND OUR MASTER NUMBER TO THE ELF
MTAPE 1,FINSGN ;SEND FINISHED MESSAGE TO ELF
JRST [ OUTSTR CM6 ;ERROR RETURN
JRST TLKDNE ]
;NOW WAIT FOR MOTION TO BE COMPLETE
MOVDN: MTAPE 1,ZMSTAD ;
JRST [ OUTSTR CM7
JRST TLKDNE]
MOVEI 3,=60
RRDMAS: SETZ 1,
SLEEP 1,
MTAPE 1,MSTADD ;GET THE VALUE OF "MASTER" WORD IN ELF
JRST [ OUTSTR CM3 ;ERROR RETURN
JRST TLKDNE ]
MOVE 2,MASTER ;LOAD VALUE INTO REGISTER
CAIE 2,12345 ;CHECK IF CORRECT ELF MASTER NUMBER
JRST [ SOJG 3,RRDMAS
OUTSTR CM8 ;ELF NOT READY FOR COMMAND IF NOT EQUAL
JRST TLKDNE ]
MOVEI 3,=60 ;TRY READING 60 TIMES
MOVDNE: MTAPE 1,MVDADD ;GET ADDRESS OF MOVE DONE WORD IN ELF
JRST [ OUTSTR CM9 ; ERROR RETURN
JRST TLKDNE ]
MOVE 2,MVDWRD ;LOAD VALUE INTO REGISTER
CAIE 2,12345 ;CHECK IF INDICATES MOVE DONE
JRST [ SETZ 1, ;NO GO TO SLEEP AND TRY AGAIN
SLEEP 1,
SOJG 3,MOVDNE
JRST MOVDN ]
;RETURN TO CALLING PROGRAM
TLKDNE: IOPOP 1, ;RELEASE THE ELF & RESTORE CHANNEL 1
JFCL ;JUST CANNOT HAPPEN
MOVE 16,[XWD HOLD,2] ;RESTORE THE REGISTERS
BLT 16,15
MOVE 16,HOLD+14
SUB P,[3(3)] ;POP ARGUMENTS OFF STACK
JRST @3(P) ;RETURN
;END OF "TLKEF3"
; [LOCAL STORAGE AREA]
HOLD: BLOCK 15
;I/O DATA AREAS
ZMSTAD: 004000,,CMDADD ;ZERO OUT ELF MASTER NUMBER
0 ;
MVDADD: 002004,,MVDDAT ;INBUF LIST FOR MOVE DONE NUMBER
MVDWRD: 0 ;VALUE OF MOVE DONE LOCATION IN ELF
MSTADD: 002004,,CMDADD ;INBUF LIST FOR ELF MASTER NUMBER
MASTER: 0 ;VALUE OF "MASTER" LOCATION IN ELF
CMDMDE: 400004,,400000+CMDDAT ;MODE AND ADDRESS FOR COMMAND OUTPUT STRING
OUTLST: IOWD -DBUFL,1 ;OUT COMMAND LIST
0
FINSGN: 001000,,CMDADD ;OUTBUF USED TO SEND TRANSFER COMPLETE MESSAGE
NEWMAS: 1,,0 ;MASTER NUMBER FROM 10 TO 11
;OUTPUT STRINGS
CM0: ASCIZ/IOPDLOV WHEN TRY TO SAVE CHANNEL 1 FOR "ELF"
/
CM1: ASCIZ/CANNOT INIT "ELF"
/
CM2: ASCIZ/"ELF" STATUS WORD INDICATES ERROR CONDITION
/
CM3: ASCIZ/READING OF "ELF" READY FLAG FAILED
/
CM4: ASCIZ/"ELF" NOT READY FOR MOVE COMMAND
/
CM5: ASCIZ/BAD TRANSFER OF MOVE COMMAND TO "ELF"
/
CM6: ASCIZ/BAD TRANSFER OF DONE COMMAND TO "ELF"
/
CM7: ASCIZ/UNSUCCESSFUL ZERO OF COMMAND WORD TO ELF
/
CM8: ASCIZ/ELF IS NOT ALIVE
/
CM9: ASCIZ/CANT READ ELF
/
END